package pandora.box.usuarioempresausuario;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import pandora.box.ramoatividade.RamoAtividade;
import pandora.box.ramoatividade.RamoAtividadeDAOImp;
import pandora.box.usuario.Usuario;
import pandora.box.usuarioempresa.UsuarioEmpresa;
import pandora.box.usuarionegocio.UsuarioNegocio;
import persistence.HibernateUtil;
import tabelas.controle.Uf.UF;
import tabelas.controle.Uf.UfDAOImp;
import org.hibernate.Session;
import org.hibernate.Transaction;
import MBcontrole.ValidadorParametro;

public class UsuarioEmpresaUsuarioDAOImp implements UsuarioEmpresaUsuarioDAO {
	private Session session 		= null;
	private Transaction transaction = null;
	
	public void setSessao(Session session){
		this.session = session;
	}
	
	@Override
	public boolean inserirusuarioempresa(UsuarioEmpresa usuarioempresa,
			Usuario usuario, Integer rm, Integer ufs) {
		boolean retorno = false;
		try {
			List<UF> listuf = null;
			listuf = new ArrayList<UF>();
			Integer tam, i = 0;
			this.session = HibernateUtil.getSessionFactory().openSession();
			this.transaction = this.session.beginTransaction();
			usuarioempresa.setBolativo('A');
			
			UF ufselected = new UF();
			UfDAOImp ufdao = new UfDAOImp();
			listuf = ufdao.localizaUFSelect(ufs);			
			tam = listuf.size();
			while (i < tam){
				ufselected.setIduf(listuf.get(i).getIduf());
				ufselected.setNmuf(listuf.get(i).getNmuf());
				ufselected.setSguf(listuf.get(i).getSguf());
				ufselected.setUsuarioinclusao(listuf.get(i).getUsuarioinclusao());
				ufselected.setDtinclusao(listuf.get(i).getDtinclusao());
				ufselected.setUsuarioalteracao(listuf.get(i).getUsuarioinclusao());
				ufselected.setDtalteracao(listuf.get(i).getDtinclusao());
				listuf.add(ufselected);
				//ufselected = new UF();
				
				i++;
			}
			usuarioempresa.setUf(ufselected);
			usuarioempresa.setDtinclusao(new Date());
			usuarioempresa.setUsuarioinclusao("PABLO");
			usuarioempresa.setNmresponsavel("root");
			usuarioempresa.setNufone02(usuarioempresa.getNufone01());
			usuarioempresa.setNufone03(usuarioempresa.getNufone01());
			this.session.persist(usuarioempresa);
			this.transaction.commit();
			System.out.println("CODIGO USUARIOEMPRESA SALVO POR ULTIMA VEZ: "+usuarioempresa.getIdusuarioempresa());
			retorno = true;
		} catch (Exception e) {
			this.transaction.rollback();
			e.printStackTrace();
			retorno = false;
		}finally{
			this.session.close();
		}
		try {
			if (retorno == true){
				this.session = HibernateUtil.getSessionFactory().openSession();
				this.transaction = this.session.beginTransaction();
				String criptsenha = "";
				criptsenha = ValidadorParametro.CriptografiaSenha(usuario.getSenhausuario());
				usuario.setSenhausuario(criptsenha);
				usuario.setDtinclusao(new Date());
				usuario.setLoginusuario(usuario.getEmailusuario());				
				usuario.setUsuarioinclusao("root");				
				this.session.persist(usuario);
				this.transaction.commit();
				System.out.println("CODIGO USUARIO SALVO POR ULTIMA VEZ: "+usuario.getIdusuario());
			}			
		} catch (Exception e) {
			this.transaction.rollback();
			e.printStackTrace();
			retorno = false;
		}finally{
			this.session.close();
		}
		try {
			if (retorno == true){
				this.session = HibernateUtil.getSessionFactory().openSession();
				this.transaction = this.session.beginTransaction();
				Integer tam, i = 0;
				List<RamoAtividade> listrm = null;
				listrm = new ArrayList<RamoAtividade>();
				RamoAtividade rmselected = new RamoAtividade();
				RamoAtividadeDAOImp rmdao = new RamoAtividadeDAOImp();
				listrm = rmdao.localizarRMSelected(rm);
				tam = listrm.size();
				
				while(i < tam){
					rmselected.setIdramoatividade(listrm.get(i).getIdramoatividade());
					rmselected.setNmramoatividade(listrm.get(i).getNmramoatividade());
					rmselected.setUsuarioinclusao(listrm.get(i).getUsuarioinclusao());
					rmselected.setDtinclusao(listrm.get(i).getDtinclusao());
					rmselected.setUsuarioalteracao(listrm.get(i).getUsuarioinclusao());
					rmselected.setDtalteracao(listrm.get(i).getDtinclusao());
					rmselected.setBolativo(listrm.get(i).getBolativo());
					listrm.add(rmselected);
					//rmselected = new RamoAtividade();
					
					i++;
				}
				UsuarioNegocio usuarionegocio = new UsuarioNegocio();
				usuarionegocio.setUsuarioempresa(usuarioempresa);
				usuarionegocio.setRatividade(rmselected);
				this.session.persist(usuarionegocio);
				this.transaction.commit();
			}else{
				retorno = false;
			}
		} catch (Exception e) {
			this.transaction.rollback();
			e.printStackTrace();
			retorno = false;
		}finally{
			this.session.close();
		}
		return retorno;
	}

}
